Skip to content

Денисов Артём. Технология SEQ|MPI. Быстрая сортировка с простым слиянием. Вариант 14.#129

Open
TemikGOD wants to merge 3 commits intolearning-process:masterfrom
TemikGOD:denisov_a_quick_sort_simple_merging
Open

Денисов Артём. Технология SEQ|MPI. Быстрая сортировка с простым слиянием. Вариант 14.#129
TemikGOD wants to merge 3 commits intolearning-process:masterfrom
TemikGOD:denisov_a_quick_sort_simple_merging

Conversation

@TemikGOD
Copy link

@TemikGOD TemikGOD commented Mar 1, 2026

Описание

  • Задача: Быстрая сортировка с простым слиянием.
  • Вариант: 14
  • Технология: SEQ|MPI

Краткое описание работы

В проекте реализован алгоритм быстрой сортировки с простым слиянием в двух вариантах: последовательном (SEQ) и параллельном с использованием MPI. Последовательная версия использует итерационный вариант быстрой сортировки, основанный на собственном стеке диапазонов и отдельной функции разбиения массива. После локальной сортировки части объединяются через простое последовательное слияние. Параллельная реализация распределяет данные между процессами, выполняет локальную сортировку на каждом процессе и собирает результаты на процессе‑координаторе, где выполняется финальное слияние.

Архитектура решения

  • Общий слой (common) — определяет типы входных и выходных данных, используемые обеими реализациями.
  • SEQ‑реализация — включает итерационную версию быстрой сортировки с отдельной функцией Partition и вспомогательным стеком диапазонов. После сортировки выполняется последовательное слияние отсортированных частей.
  • MPI‑реализация — использует MPI_Scatterv для распределения данных, выполняет локальную итерационную сортировку на каждом процессе, затем передаёт отсортированные фрагменты на процесс 0. Координатор выполняет последовательное слияние всех полученных частей и рассылает итоговый массив всем процессам.
  • Тесты — включают функциональные проверки корректности и производительные тесты для различных конфигураций числа процессов.

Основные результаты

  • Функциональные тесты подтверждают корректность обеих реализаций.
  • Параллельная версия показывает ускорение при небольшом числе процессов (наиболее эффективно при 2 процессах).
  • При увеличении числа процессов эффективность падает из‑за роста коммуникационных затрат (MPI_Scatterv, MPI_Send, MPI_Recv) и последовательного этапа слияния на процессе‑координаторе.
  • При 4 и 8 процессах накладные расходы начинают доминировать, что снижает speedup и общую эффективность.

Выводы

Реализованы и протестированы последовательная и параллельная версии быстрой сортировки с простым слиянием. Параллельная реализация демонстрирует ускорение на небольшом числе процессов, однако масштабируемость ограничена высокой стоимостью коммуникаций и последовательным этапом объединения данных. Алгоритм корректно работает на различных размерах входных массивов и количестве процессов, а тесты подтверждают его стабильность.


Чек-лист

  • Статус CI: Все CI-задачи (сборка, тесты, генерация отчёта) успешно проходят на моей ветке в моем форке
  • Директория и именование задачи: Я создал директорию с именем <фамилия>_<первая_буква_имени>_<короткое_название_задачи>
  • Полное описание задачи: Я предоставил полное описание задачи в теле pull request
  • clang-format: Мои изменения успешно проходят clang-format локально в моем форке (нет ошибок форматирования)
  • clang-tidy: Мои изменения успешно проходят clang-tidy локально в моем форке (нет предупреждений/ошибок)
  • Функциональные тесты: Все функциональные тесты успешно проходят локально на моей машине
  • Тесты производительности: Все тесты производительности успешно проходят локально на моей машине
  • Ветка: Я работаю в ветке, названной точно так же, как директория моей задачи
    (например, nesterov_a_vector_sum), а не в master
  • Правдивое содержание: Я подтверждаю, что все сведения, указанные в этом pull request, являются точными и
    достоверными

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants